package com.tarena.dang.services.impl;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.tarena.dang.daos.ProductDAO;
import com.tarena.dang.daos.impl.JdbcProductDAO;
import com.tarena.dang.pojos.CartItem;
import com.tarena.dang.services.CartService;
import com.tarena.dang.utils.FormatUtils;

public class CartServiceImpl implements CartService {
	private List<CartItem> cartItems = new ArrayList<CartItem>();
	private ProductDAO productDAO    = new JdbcProductDAO();

	public boolean buy(int pid) {
		for (CartItem c : cartItems) {
			if (c.getPro().getId() == pid) {
				c.setQty(c.getQty() + 1);
				return true;
			}
		}
		try {
			CartItem item = new CartItem();
			item.setPro(productDAO.findProductById(pid));
			item.setQty(1);
			cartItems.add(item);
			return true;
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		}
	}

	public void delete(int pid) {
		for (CartItem c : cartItems) {
			if (c.getPro().getId() == pid) {
				c.setBuy(false);
			}
		}
	}

	public void recovery(int pid) {
		for (CartItem c : cartItems) {
			if (c.getPro().getId() == pid) {
				c.setBuy(true);
			}
		}
	}

	public void update(int pid, int pnum) {
		if (pnum == 0) {
			pnum = 1;
		}
		for (CartItem c : cartItems) {
			if (c.getPro().getId() == pid) {
				c.setQty(pnum);
			}
		}
	}

	public List<CartItem> getBuyList() {
		List<CartItem> buyList = new ArrayList<CartItem>();
		for (CartItem c : cartItems) {
			if (c.isBuy()) {
				buyList.add(c);
			}
		}
		return buyList;
	}

	public List<CartItem> getDelList() {
		List<CartItem> delList = new ArrayList<CartItem>();
		for (CartItem c : cartItems) {
			if (!c.isBuy()) {
				delList.add(c);
			}
		}
		return delList;
	}

	public double count() {
		double total = 0;
		for (CartItem c : cartItems) {
			if (c.isBuy()) {
				total += c.getPro().getDangPrice() * c.getQty();
			}
		}
		return FormatUtils.formatDouble(total);
	}

	public double countSavePrice() {
		double save = 0;
		for (CartItem c : cartItems) {
			if (c.isBuy()) {
				save += (c.getPro().getFixedPrice() - c.getPro().getDangPrice())
						* c.getQty();
			}
		}
	return FormatUtils.formatDouble(save);
	}



}
